import random

from rest_framework import serializers
from rest_framework.response import Response
from rest_framework.views import APIView
from django_redis import get_redis_connection
from celery_tasks.sms.tasks import sms_send
from utils.ytx_sdk.sendSMS import CCP


class SMSCodeView(APIView):
    # 当输入结果是字段,没有对象所以不需要序列化操作
    # 接收手机号,在正则腮红已经验证,而且不涉及关系型数据库保存,所以不需要序列化操作
    def get(self,requese,mobile):
        """
        接收手机号,发送短信验证码
        :param mobile:
        :return: 是否成功
        """
        # 获取redis的连接
        redis_cli = get_redis_connection('verify_code')
        # 检查是否在60秒内发送记录
        redis_flag=redis_cli.get('sms_flag'+ mobile)
        if redis_flag:
            raise serializers.ValidationError('请稍后再发送短信验证码')
        # 生成短信验证码
        sms_code = str(random.randint(100000,1000000))
        # 保存短信验证码与发送记录
        # 设置有效期的数据,单位为秒
        # 存验证码300秒
        # redis_cli.setex('sms_code' + mobile,300,sms_code)
        # 存发送标记
        # redis_cli.setex('sms_flag' + mobile,60,1)
        # 发送短信
        # CCP.sendTemplateSMS(mobile,sms_code,5,1)
        redis_pl = redis_cli.pipeline()
        redis_pl.setex('sms_code'+mobile,300,sms_code)
        redis_pl.setex('sms_flag'+mobile,60,1)
        redis_pl.execute()
        # print(sms_code)
        sms_send.delay(mobile,sms_code,5,1)
        return Response({'message':'ok'})
